perm filename FILLMS.FAI[NEW,LCS]2 blob
sn#390607 filedate 1978-10-20 generic text, type T, neo UTF8
TITLE FILLMS
ENTRY FILLMS,DST,LL
EXTERNAL DL,PLTR,STF,ALF,LINES,UNPACK,RINP
DST: 0.005 ;BB
2.2 ;CC
LL: 0
;****** CHANGE 3, 4 AND 5 TO JFCL IN DDT WHEN USING DISTORTION.(SEE 'LINES')
; SUBROUTINE FILLMS(L,IDAT,R2,CENTR,R6,R7)
; COMMON/DL/RSIZ,SAVER,NAME
; COMMON/DST/BB,CC/FLM/X(600)
; DIMENSION IDAT(1),NX(600)
; EQUIVALENCE (NX,X)
; COMMON/PLTR/IPLT,RHT,DIS/LL/LL/STF/RR(8),RSTJ2
; MD=DISPLAY MP=PLOTTER MX=XGP
; DATA M2/2/
FILLMS: 0
MOVE PLTR+2 ;
MOVEM DX# ; DX=DIS
MOVE PLTR+1 ; RX=RHT
MOVEM RX#
MOVE @4(16) ; D=RSTJ2*R6
FMPR STF+10
MOVEM D#
MOVE @5(16) ; R=RSTJ2*R7
FMPR STF+10
MOVEM R#
DIST2: JRST FM1 ;GO TO 1
MOVE DST+1
MOVEM C# ; C=CC
MOVE DST ; B=BB
MOVEM B# ; SAVES IT. IT WILL RETURN LATER.
FDVR PLTR+2 ; BB=B/DIS
MOVEM DST
MOVE [1000.0] ; CC=1000
MOVEM DST+1
FM1: MOVNI 13,2 ;1 KK=-2
SETZ 7, ; KK IS 13, J IS 7 DO 205 J=1,L
MOVEI 12,@1(16) ;LOC OF IDAT
FM205: ADDI 13,3 ; KK=KK+3
; KX=KK+2
JSA 16,UNPACK ; CALL UNPACK(M,N,IDAT(J))
4 ;X COORD.
5 ;Y COORD.
(12) ; ; 12 IS IDAT ARRAY
AOJ 12, ; UPDATE POINTER
MOVEM 1,RINP+1(13) ; LL (=2 PEN DN., =3 PEN UP.)
FLTR 4 ; X(KK)=(R2+D*M)*DIS
FMPR D ;CC X(KK)=ROFF((R2+D*M)*DIS)
FADR @2(16)
FMPR PLTR+2
MOVEM RINP-1(13) ; X COORD.
FLTR 5 ;CC X(KK+1)=ROFF((CENTR+R*N)*RHT)
FMPR R ; X(KK+1)=(CENTR+R*N)*RHT
FADR @3(16)
FMPR PLTR+1
MOVEM RINP(13) ; Y COORD.
DIST3: JRST FM3 ;3 GO TO 205
MOVM RINP-1(13)
FMPR DST ; X(KK+1)=X(KK+1)*(C-BB*(ABS(X(KK))))
MOVNS ;C FOR DISTORTION
FADR C
FMPRM RINP(13)
FM3: AOJ 7, ;205 CONTINUE
CAME 7,@(16)
JRST FM205
ADDI 13,2 ; NX(3)=KX
MOVEM 13,RINP+2
MOVSI 201400
MOVEM PLTR+2 ; DIS=1.0
MOVEM PLTR+1 ; RHT=DIS
;; MOVEI 10,1 ; IF(IPLT)M=RSIZ+.4
;; MOVE [1.7] ; IF(M.LE.0)M=1
;; CAMLE DL ; IF(M.GT.M2)M=M2
;; AOJ 10, ; AC 10 HAS FILL INCREMENT
; SUBROUTINE FILLER(QQ,MD)
; COMMON /RINP/I(1) /ALF/NO,H(72) /PLTR/P,RHT,DIS
; DIMENSION Q(1)
; H(72) =NO MORE THAN 72 SEGS AT ANY SLICE POSITION!!!
;FILLER: 0 ; EQUIVALENCE (Q,I),(KNT,I(3))
MOVE RINP ; RL=Q(1)
MOVEM LEFT# ; FLOATING!
MOVEM RIGHT# ; RR=RL
SETZ 2, ; DO 1 K=1,KNT,3
FL1: MOVE RINP+2(2) ;CC Q(K)=IFIX(Q(K))
CAIN 3 ;CC Q(K+1)=IFIX(Q(K+1))
SETOM RINP+2(2) ;DO THIS ABOVE? IF(I(K+2).EQ.3)I(K+2)=-1
MOVE RINP(2) ; A=Q(K)
CAMN RINP+3(2) ; IF(Q(K+3).EQ.A)I(K+5)=-1
SETOM RINP+5(2) ;C VERTICAL LINES WILL BE IGNORED.
CAMGE LEFT ; IF(RL.GT.A)RL=A
MOVEM LEFT
CAMLE RIGHT ;1 IF(RR.LT.A)RR=A
MOVEM RIGHT ;C GET LEFT AND RIGHT EXTREME LIMITS.
ADDI 2,3 ;K=K+3
CAMGE 2,RINP+2 ;I(3)
JRST FL1
MOVN [0.5] ; RR=RR-.5
;; FADRM RIGHT
FADRM LEFT ; RL=RL-.5
FL2: MOVSI 202600 ;2 RL=RL+3
FADRB LEFT ;C SLICE COUNTER
CAML RIGHT ; IF(RL.GT.RR)RETURN
JRST FM6 ;JRA 16,2(16)
SETZ 11, ; M=0
MOVEI 2,3 ; DO 3 J=4,KNT,3
FL3: SKIPGE RINP+2(2) ; IF(I(J+2))GO TO 3
JRST FLX3
MOVE RINP(2) ;A IF(IHORZ(I,J,RL))GO TO 3
MOVE 1,RINP-3(2) ;B C FINDS SEGS UNDER SLICE AND REJECTS VERTICALS.
CAML 0,1 ; FUNCTION IHORZ(Q,J,RL)
EXCH 0,1 ; DIMENSION Q(1)
CAML 0,LEFT ; IHORZ=-1
JRST FLX3 ; A=Q(J)
CAMG 1,LEFT ; B=Q(J-3)
JRST FLX3 ;PREVIOUS X COORD. IF(A.GT.B)CALL EXCH(A,B)
AOJ 11, ; IF(RL.LE.B.AND.RL.GE.A)IHORZ=0
; M=M+1
; H(M)=HGT(J,RL,I)
MOVE 3,RINP+1(2) ; FUNCTION HGT(J,RL,Q)
FSBR 3,RINP-2(2) ; DIMENSION Q(1)
MOVE LEFT ; HGT=Q(J-2)
FSBR RINP-3(2) ;C PREVIOUS Y COORD.
FMPR 3,0 ; A=Q(J-3)
MOVE RINP(2) ;C PREVIOUS X COORD.
FSBR RINP-3(2) ; HGT=((Q(J+1)-HGT)*(RL-A))/(Q(J)-A)+HGT
FDVR 3,0 ;CAN HAVE A DIVIDE BY ZERO HERE!!
FADR 3,RINP-2(2) ;3 CONTINUE
MOVEM 3,ALF(11) ;H(M)
FLX3: ADDI 2,3
CAMGE 2,RINP+2
JRST FL3
JUMPE 11,FL2 ; IF(M.EQ.0)GO TO 2
;C M=0=SPACE BETWEEN OBJECTS -- NO FILLER
MOVEI 2,1 ; J=1
FL5: MOVE ALF(2) ;5 IF(H(J).GE.H(J+1))GO TO 4
CAML ALF+1(2) ;C SORTS HEIGHTS
JRST FL4 ; CALL EXCH(H(J),H(J+1))
EXCH 0,ALF+1(2)
MOVEM ALF(2)
CAIN 2,1 ; IF(J.EQ.1)GO TO 4
JRST FL4
SOJ 2, ; J=J-1
JRST FL5 ; GO TO 5
FL4: AOJ 2, ;4 J=J+1
CAMGE 2,11 ; IF(J.LT.M)GO TO 5
JRST FL5 ;C GO BACK IF MORE SORTING TO BE DONE
MOVEI 14,1 ; NN=1
FL6: MOVE 13,ALF(14) ;CCCCC6 IF(H(NN).EQ.H(NN+1))GO TO 7
MOVE 12,ALF+1(14) ; A=H(NN)
MOVE 13 ; B=H(NN+1)
FSBR 12
CAMG [2.0] ; IF(A-B.GT.1)CALL LINX(RL,A-1.,RL,B+1.)
JRST FL7
FSBR 13,[1.0]
FADR 12,[1.0] ;A IS 13, B IS 12
JSA 16,LINES
JUMP LEFT
JUMP 13
JUMP [3]
JSA 16,LINES
JUMP LEFT
JUMP 12
JUMP [2]
FL7: ADDI 14,2 ;7 NN=NN+2
CAMGE 14,11 ;C SKIP BY 2'S
JRST FL6 ; IF(NN.LT.M)GO TO 6
JRST FL2 ; GO TO 2
FM6: MOVE DX ;2 CALL FILLER(NX,M)
MOVEM PLTR+2 ; DIS=DX
MOVE RX ; RHT=RX
MOVEM PLTR+1
DIST4: JRA 16,6(16) ;5 RETURN
MOVE B ;C NEXT TO RESET DISTORTION FACT.
MOVEM DST ; BB=B
MOVE C ; CC=C
MOVEM DST+1
JRA 16,6(16) ; RETURN
END